package cn.itcast.com.homework.day722;
/*
1. 为某研究所编写一个通用程序，用来计算每一种交通工具运行 1000公里所需的时间.
已知每种交通工具的参数都是3个整数常量A、B、C的表达式。

现有两种工具：Car 和Plane，
其中Car 的速度运算公式为：A*B/C，
Plane 的速度运算公式为  ：A+B+C。

要求在未来如果增加第3种交通工具（如Ship）的时候，可以做到复用已有代码。
Ship的速度运算公式为  ：A+B/C。

 这里复用已有代码的意思是，比如专门定义了一个方法，用来计算所有交通工具的，
 移动指定距离所用的时间, 可以不改变这个方法，继续用它计算新增加的交通工具
 的运行时间
    double calculateTime(int distance， 计算对象) {
    return 计算结果
    }
要求自己设计该系统，并测试。
 */
public class test1 {
    public static void main(String[] args) {
        vehicle vehicle1 = new Car(1,2,3);
        vehicle vehicle2 = new Plane(1,2,3);
        vehicle vehicle3 = new Ship(1,2,3);

        calculateTime(1000, vehicle1);
        calculateTime(1000, vehicle2);
        calculateTime(1000, vehicle3);
    }
    public static void calculateTime(double distance, vehicle vehicle) {
        double speed = vehicle.Speed();
        double time = distance/speed;
        System.out.println("时间是："+time);
    }
}
abstract class vehicle{
    final double A;
    final double B;
    final double C;

    vehicle(double A, double B, double C) {
        this.A = A;
        this.B = B;
        this.C = C;
    }

    abstract double Speed();
}

class Car extends vehicle{
    Car(double A, double B, double C) {
        super(A, B, C);
    }


    public double Speed(){
        return A*B/C;
    }
}
class Plane extends vehicle{
    Plane(double A, double B, double C) {
        super(A, B, C);
    }


    public double Speed(){
        return A+B+C;
    }
}
class Ship extends vehicle{
    Ship(int A, int B, int C) {
        super(A, B, C);
    }


    public double Speed(){
        return A+B/C;
    }
}